#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <math.h>
#include <stdint.h>
#include "user.h"          //用户结构定义的头文件
#include "cloud.h"         //云平台结构定义的头文件
#include "generate.h"      //生成原始数据的头文件
#include "init_and_free.h" //为程序生成和释放内存空间的头文件
#include "Hash.h"          //调用哈希函数的头文件
#include "operation.h"     //调用各种操作的头文件

//注意，如果头文件在同一文件夹目录下，不是官方给的，要用双引号而非尖括号

int main() {
    
/*--------------初始化操作------------------*/    
    srand(time(NULL));
    User *User_A = malloc(sizeof(User));
    User *User_B = malloc(sizeof(User));
    CloudServer *Cloud_C = malloc(sizeof(CloudServer));
    public_hashseed(Cloud_C);

    if (User_A == NULL || User_B == NULL || Cloud_C == NULL) {
        fprintf(stderr, "Memory allocation failed\n");
        return 1;
    }

    initialize_user(User_A);
    initialize_user(User_B);
    initialize_cloud(Cloud_C);

    strcpy(User_A->name, "UserA");
    strcpy(User_B->name, "UserB");
    User_A->User_symbol = 1;
    User_B->User_symbol = 2;

    generate(User_A, Cloud_C);
    generate(User_B, Cloud_C);

    insert_num(User_A, Cloud_C, 7);
    insert_num(User_A, Cloud_C, 6);
    insert_num(User_A, Cloud_C, 5);

    insert_num(User_B, Cloud_C, 5);
    insert_num(User_B, Cloud_C, 8);

    RIE(User_A,User_B,Cloud_C);
    check_RIE(User_B,5);


    free_user(User_A);
    free_user(User_B);
    free_cloud(Cloud_C);

    free(User_A);
    free(User_B);
    free(Cloud_C);

    return 0;

    //防碰撞哈希让数据均匀分布到哈希表里，球入箱问题解决table长度，w的次数（胡老师会算一下），拉格朗日插值法，每一行的求交（O(1)性能）
    //可解决的问题： 批量上传和删除
}



